IOS Debug Log

出處:Cocoa 定制 Prefix.pch文件 & MY CURRENT PREFIX.PCH FILE

Cocoa 定制 Prefix.pch文件link
1
2
3
4
5
6
7
8
9
10
11
12
13
14

#ifdef DEBUG
#define DLog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
#define ALog(...) [[NSAssertionHandler currentHandler] handleFailureInFunction:[NSString stringWithCString:__PRETTY_FUNCTION__ encoding:NSUTF8StringEncoding] file:[NSString stringWithCString:__FILE__ encoding:NSUTF8StringEncoding] lineNumber:__LINE__ description:__VA_ARGS__]
#else
#define DLog(...) do { } while (0)
#ifndef NS_BLOCK_ASSERTIONS
#define NS_BLOCK_ASSERTIONS
#endif
#define ALog(...) NSLog(@"%s %@", __PRETTY_FUNCTION__, [NSString stringWithFormat:__VA_ARGS__])
#endif

#define ZAssert(condition, ...) do { if (!(condition)) { ALog(__VA_ARGS__); }} while(0)

來源:飘飘白云

详细解说请阅读原文,在这里我只说明其用法:

  1. 如果是 debug 模式下,需要在编译选项 Preprocessor Macros 中设置 DEBUG 宏;
  2. DLog 相当于 NSLog,但只在 debug 模式下有效;在 release 模式下,它什么也不做;
  3. ALog 是 Assert Log 的简写,在 debug 模式下,相当于强制 assert;在 release 模式下,相当于 NSLog;
  4. ZAssert 是带有条件判断的 ALog;

個人比較喜好的寫法:

DROPPING NSLOG IN RELEASE BUILDSlink
1
2
3
4
5
6
7
8

#ifdef DEBUG
# define DLog(...) NSLog(__VA_ARGS__)
#else
# define DLog(...) /* */
#endif
#define ALog(...) NSLog(__VA_ARGS__)